package com.xdjj.market.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xdjj.market.common.pojo.ResultPageDto;
import com.xdjj.market.dao.UserDemoMapper;
import com.xdjj.market.pojo.User;
import com.xdjj.market.service.UserDemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 用户的业务层接口的实现
 * @Service Spring框架（容器），自动将当前类实例化，并且放到Spring的容器中备用
 */
@Service
public class UserDemoServiceImpl implements UserDemoService {
    //注入用户mapper
    @Autowired
    private UserDemoMapper userDemoMapper;

    @Override
    public List<User> findUserList() {
        System.out.println("userdemoservice业务层的findUserList方法执行了");

//        //模拟从数据库查询出来
//        List<User> userList =new ArrayList<>();
//        //添加元素---自己模拟两个用户
//        User user1 =new User();
//        user1.setId(1);
//        user1.setUserName("Rose");
//        user1.setAge(18);
//
//        User user2 =new User();
//        user2.setId(2);
//        user2.setUserName("Jack");
//        user2.setAge(88);
//
//        //将用户添加到列表
//        userList.add(user1);
//        userList.add(user2);
        List<User> userList = userDemoMapper.selectList(null);

        return userList;
    }

    @Override
    public void saveUser(User user) {
        System.out.println("用户的业务层保存用户了，用户数据是："+user);
        //userDemoMapper.insert(user);
        userDemoMapper.insertUser(user);
    }

    @Override
    public void updateUser(User user) {
        System.out.println("用户的业务层修改用户了，用户数据是："+user);
        userDemoMapper.updateById(user);//必须保证有id
    }

    @Override
    public void deleteUserById(Integer id) {
        System.out.println("用户的业务层删除用户了，用户id是："+id);
        userDemoMapper.deleteById(id);
    }

    @Override
    public User findUserById(Integer id) {
        System.out.println("用户的业务层根据id查询一个用户了，用户id是："+id);
//        User user =new User();
//        user.setId(id);
//        user.setUserName("Rose");
//        user.setAge(18);

        User user = userDemoMapper.selectById(id);

        return user;
    }

    @Override
    public List<User> findUserListByUserNameLike(String userName) {
        return userDemoMapper.selectByUserNameLike(userName);
    }

    @Override
    public List<User> findUserListByAgeGte(Integer age, String userName) {
        //构建业务条件
        QueryWrapper<User> qw =new QueryWrapper<>();
        //年龄大于等于某值
        //参数1：数据库的字段列名，参数2：值
//        qw.ge("age",age);
//        //姓名包含xxx字符串，新版本无需加%了
//        qw.like("user_name",userName);

        //链式编程
        qw.ge("age",age)
                .like("user_name",userName);

        //返回查询结果
        return userDemoMapper.selectList(qw);
    }

    @Override
    public ResultPageDto<User> findUserListPage(User user, int pageNum, int pageSize) {
        //分页条件对象:参数1：当前的页码，参数2：每页显示的最大记录数
        Page pageRequest =Page.of(pageNum,pageSize);

        //业务的条件对象
        QueryWrapper<User> qw =new QueryWrapper<>();

        //一定要判断业务条件是否存在，否则语句会有问题
        if(user.getAge()!=null){
            qw.ge("age",user.getAge());
        }

        if(user.getUserName()!=null){
            qw.like("userName",user.getUserName());
        }

        //参数1：请求的分页条件对象
        //参数2：业务的条件对象
        Page pageResponse = userDemoMapper.selectPage(pageRequest, qw);

        //重新组装结果
        return ResultPageDto.of(
                //总记录数
                pageResponse.getTotal(),
                //当前页的数据
                pageResponse.getRecords()
        );
    }
}
